В C аргументы функций передаются по значению. Таким образом, копия сделана из вашего аргумента, и изменение сделано для этой копии, а не фактический указатель, который вы ожидаете увидеть измененным. Вам нужно будет изменить свою функцию, чтобы принять аргумент двойного указателя и внести изменение в аргумент разыменования, если вы хотите это сделать. Например,
void foo(int** p) {
*p = 0; /* set pointer to null */
}
void foo2(int* p) {
p = 0; /* makes copy of p and copy is set to null*/
}
int main() {
int* k;
foo2(k); /* k unchanged */
foo(&k); /* NOW k == 0 */
}
Если у вас есть возможность использовать C ++, альтернативный способ заключается в том, чтобы изменить функцию, чтобы принять ссылку на указатель.
Код:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Требуемое разрешение:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Согласно комментариям, получившим большое количество голосов, есть несколько предостережений, о которых следует помнить . Это может вернуть null
или ""
или даже "???????"
, а также может вернуть устаревший номер телефона, который больше не действителен. . Если вам нужно что-то, что однозначно идентифицирует устройство, вы должны использовать вместо этого getDeviceId ()
.