1 x86小端模式下
int a = 0x123456;
char *p = &a;
*(p+1) 的值0x34,因為p指向的是變數a記憶體單元最小位址處
,char型指標指向的是乙個位元組的空間所以char型指標+1移動8位,int型指標指向的是4個位元組的空間所以int型指標+1移動32位。
2 x86小端模式下 (str指向的是陣列記憶體單元最小位址處)
char str ="123456789";
*(char *)((short*)str+2))的值是『5』
3 char *p;p是乙個變數,這個變數的值是乙個位址,佔4個位元組
p = (char *)malloc(sizeof(char) * 10);系統開闢了一塊記憶體,將記憶體的位址放到p,p這個變數此時的值就是新記憶體的位址了。
char **q;
*q = (char *)malloc(sizeof(char) * 10);*q就是p變數的值,只要p變數的值變了就ok了
下段**的執行結果:
main() ;
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1)); }
答:2,5
*(a+1
)就是a[1],*(ptr-1)就是a[4],執行結果是2,5
&a+1不是首位址+1,系統會認為加乙個a陣列的偏移,是偏移了乙個陣列的大小(本例是5個int)
a,&a的位址是一樣的,但意思不一樣
a是陣列首位址,也就是a[0]的位址,&a是物件(陣列)首位址,
a+1是陣列下一元素的位址,即a[1],&a+1是下乙個物件的位址,即a[5].
4 typedef struct p;
p *p = (p*)malloc(sizeof(p));這裡開闢的空間只是給變數name開闢了4個位元組用來放後來開闢的位址
p -> name = (char *)malloc(sizeof(char *) * 10);
5 int a = 5;b = 3;
if(!a && b++){}
這時候a的值是5b的值是3.為什麼呢。因為!a的值是0了,那麼!a && b++的值就已經確定了,不會再執行b++了。
6 變成風格:
if( 「a" ==i )這種風格較好:因為如果把"a" == i寫成"a" = i的話編譯器會自動報錯,因為不能給常量賦值呀。
7 int a的bit3位置1,也就是第四位
a |= (0x1 << 3)
8
char *str = "hello world!";
char *s = (char *)malloc(sizeof(char) * 20);
memset(s, 0, sizeof(s));
char *ss = s;//知道為什麼這麼寫嘛。s指向的一整塊記憶體。不能s++遍歷。
assert(s && str);
while(*str)
*ss = *str;//for '\0'
printf("%s\n", s); 9
char buf[10] = "123456789";
int *p = (int *)buf;
printf("%d\n", *(buf + 1));buf一次指向乙個位元組的記憶體,要把這乙個位元組的內容'2'以%d的形式列印出對應的ascii值(也就是說char型'2'與int型50在記憶體中二進位制值是一樣的)
printf("%d\n", *(p + 1));p一次指向4個位元組的記憶體,要把這4個位元組的記憶體"5678"以%d的形式列印出
男人25歲之前該明白的
1 男人是社會的主體,不管你信或不信。所以男人應該有種責任感。2 25歲之前,請記得,愛情通常是假的,或者不是你所想象的那樣純潔和永遠。如果你過了25歲,那麼你應該懂得這個道理。3 吃飯7成飽最舒服。對待女友最多也請你保持在7成。4 30歲之前請愛惜自己的身體,前30年你找病,後30年病找你。如果你...
關於你明白了嗎的回答?
最近在看一些管理書籍,今天開公司例會,坐在下面腦子裡,浮現出乙個情景 經常見到公司旁邊的的飯店經理經常上班前對員工進行培訓,其中經常聽到 大家明白嗎?這時通常大家會回答明白了,如果員工回答的不夠大聲,經理通常會說 我沒聽見 這時員工通常會在大聲重複一遍 明白了 我們在軍訓的時候也會聽到這種 明白了 ...
malloc realloc和new你明白了麼?
sdkint winapi winmain hinstance hinstance,hinstance hprevinstance,lptstr lpcmdline,intncmdshow free pbuf sleep 1000 pvoid pbuf malloc 2 for inti 0 i m...