当前位置:网站首页>C language enhancement -- pointer
C language enhancement -- pointer
2022-07-05 07:52:00 【Soy sauce;】
1. Memory profile
notes : After all pointer types are defined, the memory space takes up four
** The variable is equivalent to the address name
The address is equivalent to the memory name
The corresponding data is stored in memory
But the pointer variable stores the address , Characters are stored in character variables ,( Use four spaces as one ),,,
Seemingly one effect , Actually, it uses four spaces , The operation is exactly the same as that of one ,,,
Integer variables store integers , However, when storing, the data is rationalized and evenly distributed in memory **
A byte space corresponds to an address
To get the address is to get the corresponding variable
Address distribution in memory
1. Sort
2. Distribution
2. Pointer overview
Some operators about pointers
& Is to get the starting address of the variable , Regardless of data type , Constants also work ( Machine code , Must use & once , I can see it only because I use 16 Binary printing )
* Take out the value in the corresponding address , If variable , Get the value in the width of the corresponding data type , Such as int take 4 individual , If address , Look at type conversion , If not, take one
Array name , Function name , String names all start with addresses !!!
But a single variable is not , The variable represents the value in the address . Other long and ambiguous strings are .
/ First step : All variables are stored in memory , Let's print the storage address of the variable /
/ The second step : All variables can hold certain values , Then assign values and print /
/ The third step : Use the pointer :1) Value 2) Move the pointer /
+1 and ++ The effect is the same
int type +1 Move 4 Bytes
char type +1 Move 1 Bytes
Look at the specific type
The array is also more than the same plus 4, But the extracted value will be garbled
See the figure below for details. :
Code
/* * printf_test.c V1.0 * Copyright (c) 2017 Shenzhen 100ask Technology Co.Ltd.All rights reserved. * http://www.100ask.org * 100ask.taobao.com * * Test platform : ubuntu16.04(64 Bit machine ) * ubuntu9.10 (32 Bit machine ) * compiler : gcc */
#include <stdio.h>
void test0()// Test a single variable
{
char c;
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&c =%p\n",&c);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
c = 'A';
pc = &c;
printf("c =%c\n",c);
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("*pc =%c\n",*pc);
printf("//=================\n");
}
void test1()// Test variable storage address
{
int ia;
int *pi;
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&ia =%p\n",&ia);
printf("&pi =%p\n",&pi);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
ia = 0x12345678;
pi = &ia;
pc = (char *)&ia;
printf("ia =0x%x\n",ia);
printf("pi =%p\n",pi);
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("*pi =0x%x\n",*pi);
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc);
printf("//=================\n");
}
void test2()// Test array
{
char ca[3]={
'A','B','C'};
char *pc;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("ca =%p\n",ca);
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already ca[3]={'A','B','C'};
pc = ca;
printf("pc =%p\n",pc);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc); pc=pc+1;
printf("pc =%p\t",pc); printf("*pc =0x%x\n",*pc);
printf("//=================\n");
}
void test3()// Test array storage address
{
int ia[3]={
0x12345678,0x87654321,0x13572468};
int *pi;
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("ia =%p\n",ia);
printf("&pi =%p\n",&pi);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already ia[3]={0x12345678,0x87654321,0x13572468};
pi = ia;
printf("pi =%p\n",pi);
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi); pi=pi+1;
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi); pi=pi+1;
printf("pi =%p\t",pi); printf("*pi =0x%x\n",*pi);
printf("//=================\n");
}
void test4() Test string
{
char *pc="abc";
/* First step : All variables are stored in memory , Let's print the storage address of the variable */
printf("&pc =%p\n",&pc);
/* The second step : All variables can hold certain values , Then assign values and print */
// There is already pc="abc";
/* The third step : Use the pointer :1) Value 2) Move the pointer */
printf("pc =%p\n", pc);
printf("*pc =%c\n",*pc);
printf("pc str=%s\n", pc);
}
int main(int argc,char **argv)
{
printf("sizeof(char )=%d\n",sizeof(char ));
printf("sizeof(int )=%d\n",sizeof(int ));
printf("sizeof(char *)=%d\n",sizeof(char *));
printf("sizeof(char **)=%d\n",sizeof(char **));
printf("//=================\n");
//test0();
//test1();
//test2();
//test3();
test4();
return 0;
}
String printing
%s Use
边栏推荐
- Markdown tips
- How to realize audit trail in particle counter software
- Screen record of the opening ceremony of the Beijing winter olympics 2
- Acwing-宠物小精灵之收服-(多维01背包+正序倒序+两种形式dp求答案)
- Calibre garbled
- Count and sort the occurrence times of specific fields through SQL statements
- Apple animation optimization
- 研究发现,跨境电商客服系统都有这五点功能!
- Rename directory in C [closed] - renaming a directory in C [closed]
- Define in and define out
猜你喜欢
Logistic regression: the most basic neural network
SQL JOINS
Numpy——1. Creation of array
UEFI development learning 2 - running ovmf in QEMU
Beijing Winter Olympics opening ceremony display equipment record 3
Leetcode solution - number of islands
Altium designer 19.1.18 - Import frame
软件设计师:03-数据库系统
What is Bezier curve? How to draw third-order Bezier curve with canvas?
Markdown tips
随机推荐
Summary of STM32 serial port sending and receiving data methods
Ads usage skills
Practical application cases of digital Twins - fans
Altium designer 19.1.18 - hide the fly line of a network
Opendrive ramp
[neo4j] common operations of neo4j cypher and py2neo
Batch modify the txt file code to UTF-8 (notepad++)
solver. Learning notes of prototxt file parameters
Numpy——1.數組的創建
Numpy——1. Creation of array
Opendrive record
Apple animation optimization
Realization of binary relation of discrete mathematics with C language and its properties
[professional literacy] specific direction of analog integrated circuits
研究发现,跨境电商客服系统都有这五点功能!
What is Bezier curve? How to draw third-order Bezier curve with canvas?
Scm-05 basis of independent keyboard
Win10 shortcut key
P3D gauge size problem
Baiwen 7-day smart home learning experience of Internet of things