more C pointer confusion
This commit is contained in:
parent
9533468f7d
commit
9dcae3ac16
4 changed files with 79 additions and 0 deletions
|
|
@ -80,3 +80,17 @@ The more formal way of doing this would be:
|
|||
```c
|
||||
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'}
|
||||
```
|
||||
|
||||
However, in practice, if you just want quick access to a string, where you don't
|
||||
need to modify the individual characters later, you can just use a direct
|
||||
pointer definition:
|
||||
|
||||
```c
|
||||
char *name = "Thomas";
|
||||
```
|
||||
|
||||
And then to use it later just use `name` (no `*`). In this scenario, the string
|
||||
is a string literal and is stored as read-only. It can be redefined (the pointer
|
||||
can point to something else) but it's not mutable itself.
|
||||
|
||||
More info in [Pointers in C](./Pointers_in_C.md).
|
||||
|
|
|
|||
0
zk/Impedence.md
Normal file
0
zk/Impedence.md
Normal file
|
|
@ -37,3 +37,54 @@ becomes equal to `27`.
|
|||
|
||||
Pointers are necessary because C uses a [call by value](./C_is_call_by_value.md)
|
||||
system for function arguments.
|
||||
|
||||
## To use a pointer you don't have to declare the value first (confusing)
|
||||
|
||||
It is totally legitimate to declare a pointer in one go, especially with
|
||||
strings:
|
||||
|
||||
```c
|
||||
char *name = "Thomas";
|
||||
```
|
||||
|
||||
Then to reference the value (_not_ the address, the actual value) you just use
|
||||
`name`.
|
||||
|
||||
This is confusing but I just have to accept for now.
|
||||
|
||||
Note that if you do this, it creates the string in read-only memory. You can't
|
||||
modify the individual characters of `"Thomas"`. To do this you would need to
|
||||
define it as:
|
||||
|
||||
```c
|
||||
char name[] = "Thomas";
|
||||
name[0] = "t";
|
||||
```
|
||||
|
||||
Here is a real example of me doing this:
|
||||
|
||||
```c
|
||||
void mqtt_publish(esp_mqtt_client_handle_t client, char *topic,
|
||||
const char *payload)
|
||||
{
|
||||
if (MQTT_CONNECTED) {
|
||||
esp_mqtt_client_publish(client, topic, payload, strlen(payload), 0, 0);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
And then when calling the function:
|
||||
|
||||
```c
|
||||
mqtt_publish(mqtt_client, "test_topic", "Test message");
|
||||
```
|
||||
|
||||
Or, using a variable:
|
||||
|
||||
```c
|
||||
static char *topic = "test_topic";
|
||||
mqtt_publish(mqtt_client, topic, "Test message");
|
||||
```
|
||||
|
||||
> Note in the above the `*` is part of the type definition, _not_ the variable.
|
||||
> Even more confusing!
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@ tags:
|
|||
- mqtt
|
||||
---
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
sudo apt install mosquitto
|
||||
```
|
||||
|
||||
This just installs the broker and you can start publishing straight away but if
|
||||
you want to view the incoming requests to the given topic you need to install
|
||||
the client package:
|
||||
|
||||
```sh
|
||||
sudo apt install mosquitto-clients
|
||||
```
|
||||
|
||||
## Config
|
||||
|
||||
At `/etc/mosquitto/mosquitto.conf`.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue